
#ifndef TIPOSOBSTACULOS_H_
#define TIPOSOBSTACULOS_H_

#include "../../../Utils/GestionId.h"
#include "../../../Utils/YamlParser.h"

#include "../GestionTiposObjetos.h"
#include "Escalera.h"
#include "Plataforma.h"
#include "Caneria.h"
#include "CajaInterrogacion.h"
#include "CamaElastica.h"
#include "CajaPow.h"
#include <algorithm>

class TipoCajaInterrogacion : TipoObjetoEstatico {
	
	vector<infoAccion_t> accionesParticulares;
	
	public:
		
		TipoCajaInterrogacion(TipoObstaculo_y tipoObstaculo);
		void AsignarAObstaculo(CajaInterrogacion* cajaInterrogacion);
};

class TipoCaneria : TipoObjetoEstatico {
	
	public:
		
		TipoCaneria(TipoObstaculo_y tipoObstaculo);
		void AsignarAObstaculo(Caneria* caneria);
};

class TipoCamaElastica : TipoObjetoEstatico {
	
	public:
		
		TipoCamaElastica(TipoObstaculo_y tipoObstaculo);
		void AsignarAObstaculo(CamaElastica* camaElastica);
};

class TipoCajaPow : TipoObjetoEstatico {
	
	vector<infoAccion_t> accionesParticulares;
	
	public:
		
		TipoCajaPow(TipoObstaculo_y tipoObstaculo);
		void AsignarAObstaculo(CajaPow* cajaPow);
};

class GestionTiposObstaculos {

	static TipoCajaInterrogacion* tipoCajaInterrogacion;
	static TipoCaneria* tipoCaneria;
	static TipoCamaElastica* tipoCamaElastica;
	static TipoCajaPow* tipoCajaPow;
	
	public:
		
		static void Inicializar(vector<TipoObstaculo_y> tiposObstaculos);
		static void AsignarTipoObstaculo(CajaInterrogacion* cajaInterrogacion);
		static void AsignarTipoObstaculo(Caneria* caneria);
		static void AsignarTipoObstaculo(CamaElastica* camaElastica);
		static void AsignarTipoObstaculo(CajaPow* cajaPow);
};

#endif /* TIPOSOBSTACULOS_H_ */
